package arduinoInterface;

import java.io.IOException;
import java.io.InputStream;
import java.util.StringTokenizer;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;




//Per la lettura da seriale utilizziamo un metodo Event Based, in modo da leggere solo quando viene scritto qualcosa
public class SerialReader implements SerialPortEventListener {

    private InputStream in;
    private byte[] buffer = new byte[1024];
    private Float temperatura, luminosita;
    private String pir, led;
    private boolean statoLettura;

    public SerialReader(InputStream in) {
        this.in = in;
        this.statoLettura=false;
    }
    
    
    //Metodi di get per le variabili rilevate da Arduino
    public Float getTemperatura(){
    	return this.temperatura;
    }

    public Float getLuminosita(){
    	return this.luminosita;
    }
    
    public String getPir(){
    	return this.pir;
    }
    
    public String getLed(){
    	return this.led;
    }
    public void setStatoLettura(boolean b){
    	this.statoLettura=b;
    }
    public boolean getStatoLettura(){
    	return this.statoLettura;
    }
    
    
    
    @Override
    public void serialEvent(SerialPortEvent oEvent) {

        int data;
        int len = 0;
        
        try {

            while ((data = in.read()) > -1) {
                if (data == '\n') {
                    break;
                }
                buffer[len] = (byte) data;
                len++;
            }
            //Converto il buffer in una stringa
            String stringBuffer = new String(buffer);

            //Tokenizzo la stringa
            StringTokenizer stringToken = new StringTokenizer(stringBuffer);

            //Prelevo il primo valore per capire di quale grandezza si tratta.
            char val = stringToken.nextToken().charAt(0);


            switch (val) {

                case 'T':
                    temperatura = Float.parseFloat(stringToken.nextToken());
               //     System.out.println("TEM: " + temperatura);
                   
                    break;
                case 'L':
                    luminosita = Float.parseFloat(stringToken.nextToken());
                //    System.out.println("LUM: " + luminosita);
                    break;
                case 'P':
                    pir = stringToken.nextToken();
             //       System.out.println("PIR: " + pir);
                    break;
                case 'l':
                    led = stringToken.nextToken();
               //     System.out.println("LED: " + led + "\n");
                    this.statoLettura=true;
                    break;
                default:
                    System.out.println("Valori non riconosciuti");
                    break;

            }


        } catch (IOException e) {
            e.printStackTrace();
            System.exit(-1);
        }

    }
}